موضوعات
IT ENGINEERING 21 / 2برچسب:, :: 12 :: نويسنده : BlackHats
از زمان نسل اول پردازنده های اینتل که با معرفی پردازنده 8086 در سال 1978 آغاز شد تا کنون تنها مجموعه ای از دستورالعمل های آن زنده باقی مانده و هنوز در اکثر نرم افزارها از آنها استفاده می شود، هرچند نسل های جدید محدوده این دستورالعمل ها را که به نام دستورالعمل های x86 شناخته میشوند گسترده تر کردند ، اما سازگاری با دستورالعملهای نسلهای پیشین هرگز در طراحی معماری نسلهای بعدی فراموش نشد.
معماری نسل ششم پردازندههای اینتل که از «پنتیوم پرو» تا «پنتیوم III» را در برمی گرفت یکی از موفق ترین معماری های اینتل به شمار می رود، این معماری که P6 نام دارد توانست به پردازنده های اینتل آن چنان قدرتی بخشد که مدتها رقیبی برای آنها پیدا نمی شد، اما پس از آن، معماری NetBrust به کار برده شده در پردازنده های «پنتیوم 4»، دیگر نتوانست به یکه تازی های اینتل در بازار پردازنده های کامپیوترهای شخصی ادامه دهد.
معماری نسل آینده پردازنده های اینتل که Core™ نام گرفته است، آن چنان متفاوت است که شرکت اینتل تصمیم گرفته نام پردازنده هایی که از این معماری در آنها بهره برده شده دیگر «پنتیوم» نباشد، با این که پیش بینی مرگ (پنتیوم) در سیزدهمین سال حیاتش چندان دور از انتظار نبود.
لوگو و شعار جدید اینتل
نام تجاری جدیدی که از این پس بر روی کلیه پردازنده های اینتل گذاشته خواهد شد، بسیار به معماری آنها نزدیک است: Core2. تا کنون عرضه دو خانواده پردازنده های Core2 Duo برای کامپیوتر های میان قیمت و Core2 Extreme برای کامپیوترهای گرانقیمت در حوزه کامپیوترهای روی میزی قطعی شده و در ماه های آینده شاهد حضور آنها در بازار خواهیم بود، هر دو این پردازنده ها با هسته Conroe تجهیز شده اند که از پیکر بندی دوهسته بهره میبرد. در حوزه کامپیوترهای همراه نیز هسته Merom و در حوزه کامپیوترهای سرویس دهنده، هسته Woodcrest معرفی شده اند اما هنوز جزئیات دقیقی در مورد پردازنده هایی که این هسته ها در آن به کار گرفته خواهد شد داده نشده است.
شباهت بسیار زیادی میان نام پردازنده های Core2 با پردازنده های Core Duo وجود دارد، Core Duo و برادر ارزانقیمتش Core Solo نام پردازنده های مدرن حوزه کامپیوترهای همراه اینتل می باشند که بر پایه معماری P-M (نسخه تکامل یافته معماری P6) با هسته Yonah عرضه می شوند، این پردازنده های 32 بیتی هم اکنون در اکثر کامپیوترهای همراه مدرن و iMacهای جدید Apple استفاده میشوند.
از معماری CPU چه می دانید؟
پیش از آنکه به بررسی معماری نسل آینده پردازنده های اینتل بپردازیم ابتدا اجازه دهید تا دانستنی های ابتدایی که علم به آن ضروری به نظر می رسد را تشریح کنیم:
کدهای اجرایی سیستم عامل و نرم افزارها در آخرین مرحله پیش از ارسال به پردازنده، می بایست به زبان ماشین و اسمبلی تبدیل شود، بالغ بر 50 درصد کدهایی که پردازنده اجرا می کند عملیات «Load» (بارگذاری از حافظه به ثبات های داخلی پردازنده) و عملیات «Store» (ذخیرهسازی از ثباتهای داخلی به حافظه کامپیوتر) را دیکته می کنند، از این میان، اکثریت کدها «بارگذاری» و بخش اندکی کدهای «ذخیرهسازی» هستند. 15 الی 20 درصد کدها مختص دستورالعمل های انشعابی مانند if، then و else است که روال پیش روی برنامه را با شروط مشخصی تعیین می کنند.
سایر کدها بیشتر شامل دستورالعمل های ساده ریاضی مانند ADD (جمع) یا MUL (ضرب) میشوند. در این بین تنها درصد کمی از کدها به دستورالعمل های سطح بالای محاسباتی دیگر مانند DIV (تقسیم) یا SQRT (به توان دو) ترجمه میشود. هر یک از این دستورالعمل ها برای اجرا به ترتیب وارد یکی از خطلولههای پردازنده میشود، در هر خط لوله به طور استاندارد پنج واحد زیر وجود دارد:
• «واحد واکشی»:
در این واحد دستورالعمل از حافظه اصلی خوانده شده و به ثباتهای داخلی پردازنده منتقل میشود، دستورالعمل واکشی شده الگویی از بیتها به زبان ماشین است که در بر گیرنده نوع عملگر و آدرس عملوندهای آن است.
• «واحد کدگشایی»:
در این واحد الگوی دستورالعمل از داخل ثبات پردازنده خوانده شده و با کدگشایی آن واحد اجرایی را برای اجرای محاسبات درخواست شده آماده می کند.
• «واحد واکشی عملوند»:
این واحد، داده هایی که آدرس آنها در دستورالعمل ذکر شده را از حافظه کاشه، به ثباتهای داخلی پردازنده انتقال میدهند.
• «واحد اجرایی»:
پس از حصول اطمینان از موجودیت داده ها در داخل ثبات های پردازنده و آماده سازی واحد اجرایی، واحدهای ریاضی و منطقی موجود در بخش اجرایی پردازنده (ALU)، محاسبه دستورالعمل را آغاز می کنند.
• «واحد بازگیری»:
در این مرحله نتیجه محاسبات که داخل ثبات های پردازنده ذخیره شده به حافظه کاشه یا حافظه اصلی کامپیوتر منتقل میشود.
معماری Intel Core2 در مقابل AMD Athlon 64
پیش واکشی و کاشه نمودن هوشمند تر
اطمینان از موجودیت دستورالعمل ها و داده ها در داخل حافظه کاشه پیش از اجرای دستورالعمل، یکی از مهمترین دغدغه های طراحان معماری پردازنده در عصر پردازنده های 3 گیگاهرتزی است، این امر شرایط لازم را برای افزایش کارایی با زیاد شدن فرکانس کاری پردازنده را فراهم میسازد. در غیر این صورت فرکانس بالاتر به معنی صرف زمان انتظار بیشتر برای رسیدن اطلاعات به پردازنده خواهد بود. بخشی از پردازنده که حافظه کاشه را برای اجرای دستورالعمل ها آماده میسازد ، «بخش پیش واکشی» نام دارد، با این وجود الگوریتم های سختافزاری موجود برای پیش واکشی همیشه وظیفه خود را با موفقیت انجام نمیدهند و موردهای اندکی هنوز وجود دارد که پس از ورود دستورالعمل به خط لوله داده ها با تاخیر از حافظه کاشه دریافت میشوند. این موضوع باعث میشود تا کارایی کلی پردازنده به ویژه در برنامههایی که به پهنای باند حافظه حساس هستند، کم شود.
بخش پیش واکشی در معماری Core™ بدون هیچ تردیدی از آنچه در معماری های K8 و NetBrust یافت میشود برتر است. هر هسته پردازنده ای که از این معماری بهره می برد حداقل سه واحد پیش واکشی (دو واحد برای داده و یک واحد برای دستورالعمل) مختص به خود دارد، دو واحد پیش واکشی دیگر نیز برای کاشه سطح 2 این پردازنده ها در نظر گرفته شده است. لذا پردازنده های دو هسته ای Core2 که با این معماری عرضه خواهند شد با 8 واحد «پیش واکشی» مجزا می توانند از پهنای باند حافظه موجود به صورت موثرتری استفاده کرده و ضریب اطمینان حضور اطلاعات در حافظه کاشه را هنگام اجرای یک دستورالعمل بالا برند.
حافظه کاشه موجود در پردازنده های مبتنی بر معماری Core نیز در افزایش کارایی آن موثر است. یک حافظه کاشه سطح دو 4 مگابایتی میان هر دو هسته پردازنده به اشتراک گذاشته شده است و دسترسی به آن در 12 تا 14 سیکل ساعت موثر خواهد بود. حافظه کاشه سطح یک داده و دستورالعمل نیز هر دو تا 32 کیلوبایت با زمان دسترسی 3 سیکل ساعت ارتقا پیدا کردهاند. باید اضافه کرد حافظه کاشه Trace که در معماری NetBrust از آن بهره گرفته شده بود، با توجه به خط لوله های کوتاه Core کنار گذاشته شده است. این حافظه اساسا به عنوان یک بافر برای دستورالعمل های کدگشایی نشده به کار گرفته می شد در حالی که این واحد برای خط لوله های طولانی NetBrust مفید واقع شده بود ، اینتل تشخیص داده که طرح سنتی حافظه کاشه سطح یک در این معماری موثرتر می باشد.
![]() Core در برابر K8
زیرسیستم حافظه
مهمترین رقیب Core ، معماری K8 دو ویژگی برتر کوچک اما غیرقابل چشم پوشی در زیرسیستم های حافظه دارد.
اولین ویژگی حافظه کاشه سطح یک بزرگتر آن است، هر دو بخش دستورالعمل و داده این حافظه، 64 کیلوبایت گنجایش دارند در حالی که طراحان Core بر این بخش ها 32 کیلوبایت در نظر گرفته اند. این تنها یک برتری کوچک است چرا که انتظار می رود حافظه 8 طرفه 32 کیلوبایتی، عملکرد بسیار نزدیکی نسبت به حافظه 2 طرفه 64 کیلوبایتی داشته باشد.
ویژگی دوم و با اهمیت تر معماری K8، «کنترلرحافظه» مجتمع در داخل پردازنده است. در کامپیوترهای مبتنی بر این معماری حافظه اصلی به صورت مستقیم توسط «کنترلر حافظه» داخلی پردازنده مدیریت می شوند، در حالی که در کامپیوترهای مبتنی بر معماری های Intel «کنترلرحافظه» در داخل چیپست «پلشمالی» مادربرد قرار داشته و تعامل پردازنده با حافظه اصلی، از این طریق صورت می گیرد. «کنترلرحافظه» مجتمع در داخل پردازنده، دسترسی بی واسطه به حافظه اصلی با تاخیر کمتر را به همراه دارد.
تاخیر دسترسی به حافظه اصلی در کامپیوترهای پنتیوم 4 تقریبا دو برابر کامپوترهای Athlon 64 است (80 الی 90 در برابر 45 الی50 نانوثانیه). با این وجود مهندسین اینتل در معماری جدید خود راه کارهای متعددی مانند «آشکارسازی حافظه» برای پنهان کردن این تاخیر از چشمان پردازنده ابداع کردهاند که در ادامه به آنها اشاره خواهیم کرد.
دو ویژگی برتر مطرح شده در معماری K8 توسط دیگر برتری های زیر سیستم حافظه معماری Core قابل چشم پوشی هستند، پردازنده های مبتنی بر معماری Core دارای حافظه کاشه سطح دو گسترده تر و واحدهای پیش واکشی هوشمندتری نسبت به K8 هستند. حافظه کاشه سطح یک در Core پهنای باندی نزدیک به دو برابر پهنای باند K8 ارائه میکند (اندازه گیری شده با نرم افزار ScienceMark) علاوه بر این در پیکربندی های دو هسته ای نیز حافظه کاشه سطح دو در Core حدود 2.5 برابر سریع تر از آنچه که معماری K8 در پردازنده های Athlon 64 X2 ارائه کرده، عمل می کند.
کدگشایی هوشمندتر
Core اولین معماری در دنیای پردازنده های x86 است که به 4 واحد کدگشایی x86 تجهیز شده است: 3 «کدگشای ساده» و یک «کدگشای پیچیده». وظیفه واحدهای کدگشایی در تمام پردازنده های x86 کنونی تنها ترجمه کردن دستورالعمل های ورودی (شامل کدعملگر و آدرس ها) نیست، بلکه ترجمه دستورالعمل ها با طول متغییر 1 الی 15 بیتی به دستورالعمل های از پیش تعیین شده با طول ثابت (دستورالعمل های RISC) که زمانبندی و اجرای آنها ساده تر است نیز می باشد، اینتل نام این دستورالعمل ها کدگشایی شده را micro-op نهاده است.
در معماری Core، اکثر دستورالعمل ها x86 توسط یکی از سه واحدکدگشایی ساده به یک micro-op ترجمه می شوند و سایر دستورالعمل های سطح بالایی که حداکثر با چهار micro-op بیان میشوند، توسط واحد کدگشایی پیچیده کدگشایی میگردند.
یکی دیگر از نوآوری های معماری Core، «همجوشی macro-op» نام دارد، این ویژگی ترکیب دو دستورالعمل وابسته x86 را ممکن میسازد. به عنوان مثال دستورالعمل مقایسه (CMP) با دستورالعمل پرش (JNE) به کمک این ویژگی ترکیب شده و به یک micro-op کدگشایی میشود. این دستورالعمل ها به طور عمومی نتیجه کامپایل عبارات شرطی if، then و else هستند.
به کمک این نوآوری، پردازنده هایی که از معماری Core بهره میبرند، توانایی کدگشایی پنج دستورالعمل را در هر سیکل ساعت دارند ، با توجه به تصویر، پنج دستورالعمل به صورت هم زمان از صف دستوالعمل ها خوانده شده و در نهایت چهار micro-op کدگشایی میشود.
به گفته اینتل به طور متوسط در برنامه های عمومی کامپیوتر، از میان هر 10 دستورالعمل استاندارد x86 که به پردازنده ارسال میشود دو دستورالعمل قابل ادغام با همدیگر هستند و دستورالعمل ترکیب شده مسیر خطلوله را همانند یک دستورالعمل ساده طی کرده و در پایان خط لوله تاثیر مشابه با حالت ترکیب نشده بر روی ثباتهای پردازنده خواهد گذاشت. در صورتی این ادعای اینتل صحت داشته باشد، «همجوشی macro-op» حدود 11 درصد افزایش کارایی را به ارمغان خواهد آورد.
دیگر نوآوری اینتل در حوزه کدگشایی معماری اینتل «همجوشی micro-op» نام دارد، هدف نهایی این ویژگی که از معماریP-M پردازنده های Core Duo به ارث برده شده ترکیب micro-opها با یکدیگر است. دستورالعمل های پیچیده ی اندکی وجود دارند که پس از کدگشایی به چندین micro-op تبدیل می شوند، در مقابل دستورالعمل های ساده متعددی نیز هستند که نمی توان آنها را با یک micro-op بیان نمود. به عنوان مثال دستور ساده ADD (جمع) در صورتی که عملوندهایش ثباتهای پردازنده باشند (مانند ADD EBX,EAX) به سادگی به یک micro-op کدگشایی میشود اما اگر یکی از عملوندها آدرس خانهای از حافظه باشد پیچیدگی این دستور ساده برای پردازنده بسیار زیاد می شود. مانند دستور ADD [mem],EAX که بر اساس آن مقدار ثبات EAX باید با مقدار خانه mem حافظه جمع شده و حاصل در خانه mem قرار گیرد.
در معماریهای ابتدایی مانند آنچه که در «پنتیوم پرو» به کار برده شده بود، این نوع دستورالعمل ها به چندین micro-op شکسته میشد، زیرا واحدهای محاسباتی پردازنده تنها به ثبات ها دسترسی مستقیم برای محاسبات خود دارند. بنابر این در بهترین حالت دستورالعمل ADD [mem],EAX به دستورالعملهای زیر شکسته میشود:
• «بارگذاری» : MOV EBX,[mem]a
• محاسبات منطقی و ریاضی : ADD EBX,EAX
• «ذخیرهسازی» : MOV [mem],EBX
«همجوشی micro-op» امکان ترکیب دستور «بارگذاری» با دستور محاسباتی را میسر می سازد، بنابر به کمک این ویژگی تنها یک micro-op برای دستورالعمل بالا توسط واحد کدگشایی تولید میشود. این امر چندان کار کوچکی نیست چرا که در طرحهای قدیمی کنارهم قرار دادن عملگرهای محاسباتی با «بارگذاری» موجب طولانی شدن خطلوله و پایین آمدن حداکثر فرکانس کاری پردازنده میشد. در معماری نوین اینتل با استفاده از مدارهای بزرگ و هوشمندتر که به صورت همزمان چندین «همجوشی micro-op» انجام میدهند، این امر بدون اعمال محدودیت قابل ملاحظه ممکن گشته است.
Core در برابر K8
کدگشایی
به نظر شما چگونه سه واحد «کدگشایی ساده» به اضافه یک واحد «کدگشایی پیچیده» در معماری Core با سه واحد «کدگشایی پیچیده» موجود در معماری K8 رقابت میکند؟
معماری ابتدایی پردازنده های Athlon (معماری K7) (دو شیوه کدگشایی «مسیر برداری» و «مسیر مستقیم» داشت. کدگشایی «مسیر برداری» یک دستورالعمل منجر به چندین دستورالعمل شبه RISC شده (که AMD آنها را macro-op نام نهاده) و کدگشایی «مسیر مستقیم» منجر به یک macro-op می شود هر یک از واحدهای کدگشایی در K7 دارای توانایی کدگشایی به دو شیوه مذکور بودند. اما از دیدگاه عملکرد، کدگشایی «مسیر مستقیم» به دلیل داشتن تعداد macro-op کمتر ترجیح داده میشد. اگر از این که ما معماری منسوخ شده K7 را تحلیل می کنیم شگفت زده شده اید باید اضافه کنیم که معماری K8 به طور گسترده ای بر پایه معماری K7 طراحی گشته است.
هر سه واحد «کدگشایی پیچیده» K7 قادر به کدگشایی «مسیر مستقیم» اکثریت دستورالعمل های x86 میباشد و بخش اندکی از دستورالعمل ها به شیوه «مسیر برداری» کدگشایی می گردند. با این وجود برخی از دستورالعمل های ممیزشناور و SSE می بایست به شیوه زمان بر «مسیر برداری» کدگشایی می شدند. در معماری K8 از واحدهای «کدگشایی پیچیده» قدرتمندتری بهره برده شد که توانایی کدگشایی تمامی دستورالعمل های SSE و ممیزشناور را به شیوه «مسیر مستقیم» دارا می باشد.
مشابه ویژگی «همجوشی macro-op» اینتل در معماری K8 شرکت AMD وجود ندارد همچنین می توان فرم دیگری از «همجوشی micro-op» را در این معماری یافت، برای اینکه پیچیدگی این مقایسه ها موجب سردرگمی شما نشود در جدول 2 تفاوت های موجود را ترسیم کردهایم :
در پردازنده های Athlon ویژگی «همجوشی micro-op» وجود دارد، یک دستورالعمل مشابه دستورالعمل ADD [mem],EAX در گذر از خط لوله پردازنده تنها با یک macro-op بیان میشود. دستورالعمل های «بارگذاری» و SSE نیز در معماری Core قابل ترکیب با یکدیگر هستند اما این امکان برای K8 در نظر گرفته نشده و دستورالعمل های SSE توسط دو macro-op مجزا اجرا می شوند.
با توجه به این توضیحات به نظر شما واحدهای کدگشایی Core چگونه با K8 رقابت می کنند؟ شاید بدون دسترسی به اطلاعات بیشتر در مورد سایر بهینه سازی های Core در واحد کدگشایی، نتیجهگیری کمی دشوار باشد، با این وجود بر اساس مفروضات میتوان ایده کلی مقایسه را مطرح کرد. در اکثر وضعیت های موجود معماری Core برتری نسبی در این بخش دارد، این معماری می تواند در هر سیکل ساعت خود 4 تا 5 دستورالعمل x86 (به لطف «همجوشی macro-op» ) را کدگشایی و به داخل خط لوله هدایت کند در حالی که K8 در هر سیکل ساعت تنها 3 دستورالعمل را کدگشایی میکند.
وضعیت هایی که 3 واحد «کدگشایی پیچیده» K8 از 3 واحد «کدگشایی ساده» و یک واحد پیچیده ی Core پیشی می گیرند بسیار اندک است. این اتفاق زمانی رخ خواهد داد که پیچیدگی هر سه دستورالعمل واکشی شده از صف دستورالعمل ها در حدی باشد که توسط واحدهای «کدگشایی ساده» تعبیه شده در Core نتوان آنها را به micro-op تبدیل کرد.
دسترسی هوشمندانه به حافظه
از زمان «پنتیوم پرو»، پردازنده های x86 توانایی اجرای دستورالعمل ها، خارج از نوبت را پیدا کردند. با این حال به طور میانگین یک سوم دستورالعملها به سادگی قابلیت اجرای خارج از نوبت را ندارند، این دستورالعملها همگی از نوع «بارگذاری» هستند، جلو انداختن دستورالعملهای «بارگذاری» افزایش عملکرد چشمگیری نسبت به بارگذاری دادهها در زمانی که به آنها نیاز دارید خواهد داشت. با این کار تاخیرهای متعدد حافظه کاشه سطح 1 و سطح 2 از چشمان پردازنده پهنان خواهند ماند.
تصور این افزایش کارایی بسیار ساده است، فرض کنید یک دستورالعمل ALU در اختیار دارید که نیاز به بخش مشخصی از داده های ذخیره شده در حافظه را دارد اما این بخش داده در حافظه کاشه سطح 1 موجود نباشد، در این صورت پردازنده هنگام آغاز محاسبات باید در انتظار دریافت دادههای مذکور بماند. اگر عملیات «بارگذاری» چندین سیکل قبل از زمانی که ALU به آن بخش داده نیاز دارد آغاز شود، تاخیر انتقال داده از حافظه کاشه سطح 2 به سطح 1 اهمیت اندکی پیدا خواهد کرد. البته «بارگذاری» خارج از نوبت دادهای که قبل از آن در عملیات «ذخیرهسازی» شرکت کرده مطلوب نیست ، چرا که این عمل خارج از نوبت مقدار قدیمی و بی ارزش داده را بارگذاری میکند. به تصویر توجه کنید:
در پردازنده های Athlon ویژگی «همجوشی micro-op» وجود دارد، یک دستورالعمل مشابه دستورالعمل ADD [mem],EAX در گذر از خط لوله پردازنده تنها با یک macro-op بیان میشود. دستورالعمل های «بارگذاری» و SSE نیز در معماری Core قابل ترکیب با یکدیگر هستند اما این امکان برای K8 در نظر گرفته نشده و دستورالعمل های SSE توسط دو macro-op مجزا اجرا می شوند.
با توجه به این توضیحات به نظر شما واحدهای کدگشایی Core چگونه با K8 رقابت می کنند؟ شاید بدون دسترسی به اطلاعات بیشتر در مورد سایر بهینه سازی های Core در واحد کدگشایی، نتیجهگیری کمی دشوار باشد، با این وجود بر اساس مفروضات میتوان ایده کلی مقایسه را مطرح کرد. در اکثر وضعیت های موجود معماری Core برتری نسبی در این بخش دارد، این معماری می تواند در هر سیکل ساعت خود 4 تا 5 دستورالعمل x86 (به لطف «همجوشی macro-op» ) را کدگشایی و به داخل خط لوله هدایت کند در حالی که K8 در هر سیکل ساعت تنها 3 دستورالعمل را کدگشایی میکند.
وضعیت هایی که 3 واحد «کدگشایی پیچیده» K8 از 3 واحد «کدگشایی ساده» و یک واحد پیچیده ی Core پیشی می گیرند بسیار اندک است. این اتفاق زمانی رخ خواهد داد که پیچیدگی هر سه دستورالعمل واکشی شده از صف دستورالعمل ها در حدی باشد که توسط واحدهای «کدگشایی ساده» تعبیه شده در Core نتوان آنها را به micro-op تبدیل کرد.
دسترسی هوشمندانه به حافظه
از زمان «پنتیوم پرو»، پردازنده های x86 توانایی اجرای دستورالعمل ها، خارج از نوبت را پیدا کردند. با این حال به طور میانگین یک سوم دستورالعملها به سادگی قابلیت اجرای خارج از نوبت را ندارند، این دستورالعملها همگی از نوع «بارگذاری» هستند، جلو انداختن دستورالعملهای «بارگذاری» افزایش عملکرد چشمگیری نسبت به بارگذاری دادهها در زمانی که به آنها نیاز دارید خواهد داشت. با این کار تاخیرهای متعدد حافظه کاشه سطح 1 و سطح 2 از چشمان پردازنده پهنان خواهند ماند.
تصور این افزایش کارایی بسیار ساده است، فرض کنید یک دستورالعمل ALU در اختیار دارید که نیاز به بخش مشخصی از داده های ذخیره شده در حافظه را دارد اما این بخش داده در حافظه کاشه سطح 1 موجود نباشد، در این صورت پردازنده هنگام آغاز محاسبات باید در انتظار دریافت دادههای مذکور بماند. اگر عملیات «بارگذاری» چندین سیکل قبل از زمانی که ALU به آن بخش داده نیاز دارد آغاز شود، تاخیر انتقال داده از حافظه کاشه سطح 2 به سطح 1 اهمیت اندکی پیدا خواهد کرد. البته «بارگذاری» خارج از نوبت دادهای که قبل از آن در عملیات «ذخیرهسازی» شرکت کرده مطلوب نیست ، چرا که این عمل خارج از نوبت مقدار قدیمی و بی ارزش داده را بارگذاری میکند.
عملیات بارگذاری Load2 نمی تواند خارج از نوبت اجرا شود، چرا که مقدار آن تا زمانی که عملیات ذخیره سازی Store1 به اتمام نرسیده ارزشمند نیست. تنها زمانی که Store1 به اتمام رسد متغیر Y مقدار صحیحی پیدا خواهد کرد. با این حال هیچ دلیلی برای تاخیر در پیش افتادن عملیات بارگذاری Load4 وجود ندارد، این دستور بارگذاری مستقل از سایر دستورات ذخیرهسازی پیشین خود است و اجرای خارج از نوبت آن توام با افزایش عملکرد نهایی خواهد بود.
در حال حاضر، پردازنده ها عملیات load4 را تا زمانی که قبل از آن عملیات «ذخیرهسازی» وجود دارد به تاخیر میاندازند، چرا که پردازندههای کنونی در شناسایی وابستگی «بارگذاری» و «ذخیرهسازی» ناتوان بوده و امکان بارگذاری داده غیر ارزشمند در صورت پیشی افتادن «بارگذاری» به وجود خواهد آمد.
در معماریCore برای اولین بار راهکاری برای حل این مشکل به نام «آشکارسازی حافظه» (Memory Disambiguation) تدارک دیده شده، در این ویژگی از الگوریتم هوشمندی استفاده شده تا وابستگی دستورالعمل «بارگذاری» را با «ذخیرهسازی»های پیشین خود مشخص نماید. اجرای خارج از نوبت «بارگذاری»ها افزایش عملکرد زیادی را به همراه خواهد آورد، در برخی از کدهای کوچک محک زنی، اینتل حداکثر 40 درصد افزایش کارایی را گزارش کرده است، اگرچه این میزان افزایش کارایی در برنامههای واقعی مشاهده نخواهند شد اما تاثیر غیر قابل انکار و افزایش عملکرد ملموسی به همراه دارد. زیرا همانطور که در ابتدای مقاله به آن اشاره کردیم، دستورالعملهای «بارگذاری» حدود یک سوم micro-opهای پردازنده ها در زمان اجرای یک برنامه عمومی را تشکیل می دهند که بارگذاری داده های مطلوب آنها از حافظه کاشه سطح 2 (در حالت بد تر از حافظه اصلی) منجر به کندی اجرای برنامه خواهد شد. اما این ویژگی انعطاف پذیر و نوین معماری Core چگونه با سایر معماریها رقابت میکند؟
در معماری های P6 و P-M تدابیری برای اجرای خارج از دستور «بارگذاری» قبل از سایر «بارگذاری»ها اندیشیده شده بود همچنین امکان جلو افتادن دستورالعملهای «بارگذاری» از«ذخیرهسازی»های پیشین خود نیز در صورتی که آدرس داده ذخیره شده شناخته شده و با آدرس «بارگذاری» متفاوت باشد فراهم آمده بود اما در اکثر موارد این آدرس هنوز توسط محاسبه نشده و عملیات «بارگذاری» در موارد اندکی میتوانست از عملیات «ذخیرهسازی» جلو بیافتد. برخلاف P6، در معماری K8 تنها امکان پیشی گرفتن «بارگذاری» از عملیات ALU (مانند دستورالعمل ADD) فراهم شده است، به طور کلی «بارگذاری»ها به تنهایی نمیتوانند خارج از نوبت اجرا شده تا تاثیر تاخیر حافظه کاشه را از میان بردارند از طرف دیگر «بارگذاری»ها نمی توانند از توان اجرایی بالقوه CPU در زمانی که پردازنده در انتظار اتمام عملیات «ذخیرهسازی»است استفاده کنند. این ها همه به این معنی هستند که پردازنده Athlon 64 در اجرای خارج از نوبت کدها دارای محدودیتهای متعددی است.
شاید یکی از مهمترین دلایلی که پردازنده های Athlon 64 علیرغم داشتن دسترسی به حافظه سریع تر و منابع محاسباتی عدد صحیح بیشتر، توانایی پیشی گرفتن از پردازنده های هم رده Core Duo خود را در بازیها و محاسبات عدد صحیح را ندارند همین موضوع باشد.
اجرای دستورات چندرسانهای
یکی دیگر از نوآوری های معماری Core، قدرت بالای آن در پردازش دستورالعمل های چندرسانه ای SSE است، در معماری های پیشین اینتل تنها یک واحد 128 بیتی برای دستورالعمل های SSE در نظر گرفته شده همچنین در معماری K8 دو واحد SSE وجود دارد، اما در معماری Core سه واحد قدرتمند برای SSE در نظر گرفته شده است که دو واحد آن به صورت موازیهم عمل میکنند.
در پردازنده های فعلی، دستورالعمل های 128 بیتی SSE طی دو سیکل ساعت اجرا می شدند، که در سیکل اول 64 بیت ابتدایی و در سیکل دوم 64 بیت انتهایی اجرا شده نتیجه نهایی را حاصل می کردند، با اختصاص دادن دو واحد اجرایی موازی در معماری Core به این امر، هم اکنون امکان پردازش دستورالعمل های SSE در یک سیکل کلاک فراهم گشته است، علاوه بر این سازگاری با شیوه های سنتی پردازش SSE نیز توسط واحد غیرموازی سوم در نظر گرفته شده.
حاصل عملیات SSE بر روی دو عملوند X و Y در معماری Core تنها در یک سیکل ساعت محاسبه می گردد در حالی که در سایر معماری ها به دلیل داشتن واحد های SSE کمتر در دو سیکل میسر میشود.
البته عیب این سیستم این است که اگر پردازنده و مدارات متصل به انرژی بیشتری (بیش از چیزی که سوپر خازن تولیدکرده) در زمانی طولانی تر احتیاج داشته باشد چه اتفاقی رخ خواهد داد؟ این طرح ممکن است برای کارهای ساده مانند ایمیل زدن، مرور وب بدون دیدن فایلهای فلش، انجام امور تایپ با ورد و نظایر آن جواب دهد اما برای اپلیکیشن مالی در سازمانی بزرگ در کدت زمان طولانی چکار باید کرد؟ وانگ در این باره می گوید برای کاربرانی با مصرف بالای انرژی باید پردازنده های نسل جدید مانند هسته i7 خریداری کرده و استفاده نمود. وی می گوید محصولات با فناوریهای بسیار بالا برای کاربرانی متفاوت در نظر گرفته شده است.
جواب وانگ قانع کننده نیست چرا که نمیتوان به کاربر فقط هشدار داد که از حد 10 وات بیشتر می خواهد انرژی مصرف نماید! بهرحال اصل معماری مورد نظر وانگ و اعضای تیمش ایده خوبی است به این شرط که بتواند نیازهای کاربران را به طور یکسان پاسخ دهد.
حوزه پلتفورم یا ProxZzzy
مطابق آمار 50 درصدکاربران بدون استفاده از سیستم هایشان انها را رها کرده و سیستم رایانه ای هم در حداکثر استفاده از انرژی رها شده و تنها می ماند. نتیجه اینکه سیستمهای زیادی در حالی که انرژی را تلف می کنند رها شده و روشن می مانند.
چاره چیست؟ مدار کم مصرف که ترافیک شبکه زمانی که سیستم اصلی در خواب کامل است کنترل کند، این سیستم مداری بستههایی که می آیند را آزمایش کرده و تصمیم می گیرد که آیا این بسته ها آنقدر اهمیت دارند که سیستم اصلی را از خواب بیدار کند یا نه؟ در مثال ارایه شده توسط وانگ سیستمی با 22 وات می تواند در خواب رفته و ابزار منترل کننده ترافیکی انرژی با 0.8 وات بکار خود ادامه دهد و آنقدر قوی هست تا مثلا سیگنال وروردی از سبکه ای بی سیم را شناسایی کرده و به ماشین اصلی خبر داده و انرا بیدار کند.
بدین صورت مقدار زیادی از انرژی ذخیره شده و دیگر تلف نمی گردد. پروتکل نامیده شده برای این طرح از سوی تیم وانگ معروف به ProxZzzy شده و در کنفرانس سازندگان اروپایی مطرح گردیده است. در پیاده سازی فعلی این پروتکل در لابراتوار اینتل روی NIC (کارت شبکه) قرار گرفته است و به گفته وانگ می توان آنرا روی سی پی یو، انواع تراشه و هر جای دیگری از سیستمهای رایانه ای قرار داد.
بهرحال تلاش وانگ و اعضای تیمش ستودنی است هر چند وی ناراضی به نظر رسیده و امیدوار است به زودی تحولات زیادی در عرصه بهینه سازی مصرف انرژی توسط سیستمهای رایانه ای صورت گرفته و به گفته وی صرفه جویی 6 میلیلارد دلاری را به ازای 150 میلیون پی سی بوجود آورد. نظرات شما عزیزان:
|
||
نویسندگان
پیوندها
آخرین مطالب
|
||
![]() |